#include<iostream>
#include<unistd.h>
#include<signal.h>
#include<functional>
#include<vector>
using namespace std;
/*void handlerSig(int sig)
{
    cout<<"获得了一个信号"<<sig<<endl;
}
int main()
{
    signal(SIGINT,handlerSig);
    int cnt=0;
    while(true)
    {
        cout<<"hello world"<<getpid()<<cnt++<<endl;
        sleep(1);
    }

    return 0; 
}*/
struct task_struct
 {
     pid_t id;
     int count = 10; // 时间片，本质就是一个计数器！
     void(*code)();
 };

 std::vector<task_struct> task_list;

// //////////func////////////
 void Sched()
 {
    std::cout << "我是进程调度" << std::endl;
     //t.count--;
     //if(t.count <= 0)
         // 切换其他进程
 }
 void MemManger()
 {
     std::cout << "我是周期性的内存管理，正在检查有没有内存问题" << std::endl;
 }
 void Fflush()
 {
     std::cout << "我是刷新程序，我在定期刷新内存数据，到磁盘" << std::endl;
}
// /////////////////////////

using func_t = std::function<void()>;

std::vector<func_t> funcs;
int timestamp = 0;

 // 每隔一秒，完成一些任务
 void handlerSig(int sig)
 {
     timestamp++; //10000
     std::cout << "##############################" << std::endl;
     for(auto f : funcs)
         f();
     std::cout << "##############################" << std::endl;
     int n = alarm(1); 
 }

 int main()
 {
     funcs.push_back(Sched);
     funcs.push_back(MemManger);
     funcs.push_back(Fflush);

     signal(SIGALRM, handlerSig);
     alarm(1); 
     while(true) // 这就是操作系统运行的大致原理！
     {
        pause();
     }

     return 0;
 }